Many different types of computing systems have attained widespread use around the world. These computing systems include personal computers, servers, mainframes and a wide variety of stand-alone and embedded computing devices. Sprawling client-server systems exist, with applications and information spread across many PC networks, mainframes and minicomputers. In a distributed system connected by networks, a user may access many application programs, databases, network systems, operating systems and mainframe applications. Computers provide individuals and businesses with a host of software applications including word processing, spreadsheet, accounting, e-mail, voice over Internet protocol telecommunications, and facsimile.
Users of digital processors such as computers continue to demand greater and greater performance from such systems for handling increasingly complex and difficult tasks. In addition, processing speed has increased much more quickly than that of main memory accesses. As a result, cache memories, or caches, are often used in many such systems to increase performance in a relatively cost-effective manner. Many modern computers also support “multi-tasking” or “multi-threading” in which two or more programs, or threads of programs, are run in alternation in the execution pipeline of the digital processor.
A common architecture for high performance, single-chip microprocessors is the reduced instruction set computer (RISC) architecture characterized by a small simplified set of frequently used instructions for rapid execution. Thus, in a RISC architecture, a complex instruction comprises a small set of simple instructions that are executed in steps very rapidly. These steps are performed in execution units adapted to execute specific simple instructions. In a superscalar architecture, these execution units typically comprise load/store units, integer Arithmetic/Logic Units, floating point Arithmetic/Logic Units, and Graphical Logic Units that operate in parallel. In a processor architecture, an operating system controls operation of the processor and components peripheral to the processor. Executable application programs are stored in a computer's hard drive. The computer's processor causes application programs to run in response to user inputs.
System and application program reliability is an important concern, not only for users of computers, but for program developers as well. When an operating system is upgraded, one or more applications programs residing in the computer may lose functionality. This could occur because the upgraded operating system no longer supports certain functionality of older software. As another example, when an application program is upgraded, a different application that interacts with the upgraded application program may lose interactive functionality because the upgraded application no longer supports certain interactive functionality of the other program.
With server consolidation efforts and function-rich applications becoming more prevalent in the IT world, the need for embedded application test methods which provide for meaningful interfaces with operating systems exists. Systems now may contain hundreds of disparate applications, where increasingly, modifications to a single application could disrupt other applications or, even worse, the entire system. Additionally, the requirement for application testing prior to and after an application or OS upgrade exists. Upon application upgrade or initial installation, some functions might not work correctly. Some of these functions might be critical to the application and affect those end users only; however, some of these functions might affect the entire system and cause critical system failures or corruption. Finally, application developers often do not have the resources of private IT companies, with regard to homogeneous systems running a myriad of software at the same time. In these cases, customers have to discover errors in the applications and provide feedback to the application developers, so fixes can be generated.
Functional testing software exists to test software functionality. However, applications are generally not tested after initial development or initial installation. Typically, the functional testing software is not shipped with the software it tests. There is a need for embedded software to perform tests of application programs and operating system programs when a program upgrade or installation occurs.